package com.ppch.zerocodegenerator.utils;

import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.json.JSONUtil;

/**
 * 缓存 key 生成工具类
 *
 * @author yupi
 */
public class CacheKeyUtils {

    /**
     * 根据对象生成缓存 key (JSON + MD5)
     * 1.将对象转换为 JSON，再将 JSON 转换为 MD5，保证 key 的唯一性同时缩短 key 的长度（32位）
     *   例如：good_app_page::578831ba173be208c7cf69545c4b2bd3
     * 2.如果对象为 null，则直接返回 "null" 的 MD5 值，防止缓存穿透
     * @param obj 要生成key的对象
     * @return MD5哈希后的缓存key
     */
    public static String generateKey(Object obj) {
        if (obj == null) {
            return DigestUtil.md5Hex("null");
        }
        // 先转JSON，再MD5
        String jsonStr = JSONUtil.toJsonStr(obj);
        return DigestUtil.md5Hex(jsonStr);
    }
}
